/* Использование стандартных функций ввода/вывода sprintf и puts */

#include <90s8515.h> 	// подключаем  заголовочный файл используемого
// микроконтроллера AVR

/* Перед использованием стандартных функций ввода/вывода
   подключим заголовочный файл stdio.h */
#include <stdio.h>

char string_out[30]; 	// объявляем строковую переменную (символьный
// массив) string_out, которая может содержать
// до 30 символов

/* Основная функция программы */
void main(void)
{
int x=83; 			// объявляем и инициализируем десятичным
// значениемцелую переменную x
int y=-111; 		// объявляем и инициализируем шестнадцатиричным
// значением целую переменную y
float z=12.3; 		// объявляем и инициализируем переменную
// с плавающей точкой z

/* Осуществим форматный вывод значений переменных x, y, z в строковую
   переменную string_out */

/* Функция sprintf осуществляет форматные преобразования, аналогично
   функции printf, но помещает результаты в строку, а не в стандартный
   вывод. Kонечно, строка должна быть достаточно велика, чтобы принять
   результат. Точно также каждый знак % указывает, куда должен
   подставляться каждый из аргументов и в какой форме он должен
   выводиться. Количество % должно совпадать с количеством
   аргументов */

sprintf(string_out,"x=%-i\ny=%-d\nz=%-.3e\n",x,y,z);
/* спецификация преобразования x=%-i\ny=%-d\nz=%-.3e\n означает, что
   сначала будут выведена последовательность "x=", затем число x в
   десятичном виде (символ преобразования 'i'), причем результат будет
   выровнен по левому краю (флаг '-'). Описатель width отсутствует.
   После этого будет выведен символ перевода строки
   (последовательность \n).

   Затем будет выведена последовательность "y=", затем число y в
   десятичном виде (символ преобразования 'd'), причем результат будет
   выровнен по левому краю (флаг '-'). Описатель width отсутствует.
   После этого будет выведен символ перевода строки
   (последовательность \n).
   
   После этого будет выведена последовательность "z=", затем число
   z с 3 знаками (описатель precision .3) после запятой (в виде
   [-]d.ddd e[-]dd (символ преобразования 'e'), причем результат будет
   выровнен по левому краю (флаг '-'). После этого будет выведен
   символ перевода строки (последовательность \n).
   
   Таким образом, в строку string_out будет выведено:
   "x=83\ny=-111\nz=-1.230e1" */

/* C помощью UART осуществим вывод строки string_out, используя
   стандартную функцию ввода/вывода puts */

/* Инициализируем UART AT90s8515: разрешим передатчик
   запретим прерывания, данные - 8 бит */
UCR=0x8;

/* Скорость передачи Baud=9600 при тактовой частоте 4MHz */
UBRR=25;

puts(string_out); 	// выводим содержимое строки string_out
/* Таким образом, будет выведено:
   "x=83
   y=-111
   z=-1.230e1" */
}
